home *** CD-ROM | disk | FTP | other *** search
/ Programming Sound Cards / Programming Sound Cards.iso / sound_33 / gus.asm < prev    next >
Assembly Source File  |  1995-01-01  |  3KB  |  219 lines

  1.     Jumps
  2.     .286
  3.  
  4. _Stack    Segment Para Stack 'Stack'
  5.  
  6.     db    100h dup (0)
  7.  
  8. _Stack    ends
  9.  
  10. Extrn    MainVolume:Word,ChanOn:Word,PatternRow:Word,PlayingPattern:Word
  11. Extrn    LoadMod:Far,ClearMem:Far,StartPlaying:Far,StopPlaying:Far,Init:Far,InitDevice:Far
  12.  
  13. _Code    Segment    Para 'Code'
  14.  
  15.     assume    cs:_Code
  16.  
  17.     ModToRead    db 70 dup (0)
  18.     CommandLine    db 127 dup (0)
  19.     KeySeg        dw 0
  20.     KeyOfs        dw 0
  21.     Key        db 0
  22.     Error        db '    Internal Error. Restart the computer and try again.$'
  23.     OutOfMem    db '    Not enough mem!$'
  24.     WrongName    db '    File or path not found!$'
  25.     Docs        db '    Module Player v0.15b   (C) Robert Adolfsson (Cascada) 1993.',13,10
  26.             db 13,10
  27.             db '    For Advanced Gravis UltraSound',13,10
  28.             db 13,10
  29.             db '    Syntax: GUS <[Path]Filename.ext>.',13,10
  30.             db 13,10
  31.             db '$'
  32.  
  33. Even
  34.  
  35. Begin:
  36.     call    GetFileName
  37.     mov    ax,cs
  38.     mov    ds,ax
  39.     mov    ax,4A00h
  40.     mov    bx,4096
  41.     int    21h
  42.     jnc    NoStop
  43.     mov    ah,9
  44.     push    cs
  45.     pop    ds
  46.     mov    dx,offset cs:[Error]
  47.     int    21h
  48.     jmp    Stop
  49. NoStop:
  50.     call    InitDevice
  51.     call    Init
  52.     mov    dx,cs
  53.     mov    ds,dx
  54.     mov    dx,offset cs:[ModToRead]
  55.     call    LoadMod
  56.     call    StartPlaying
  57.     mov    ax,3509h
  58.     int    21h
  59.     mov    cs:[KeySeg],es
  60.     mov    cs:[KeyOfs],bx
  61.     mov    ax,2509h
  62.     mov    dx,cs
  63.     mov    ds,dx
  64.     mov    dx,offset cs:[KeyInt]
  65.     int    21h
  66.  
  67. DoLoop:
  68.     cmp    cs:[Key],1
  69.     jne    DoLoop
  70.     
  71.     mov    ax,2509h
  72.     mov    ds,cs:[KeySeg]
  73.     mov    dx,cs:[KeyOfs]
  74.     int    21h
  75.     call    StopPlaying
  76.     call    ClearMem
  77. Stop:
  78.     mov    ax,4C00h
  79.     int    21h
  80.  
  81. KeyInt        Proc    Near
  82.  
  83.     push    ax
  84.     push    ds
  85.     mov    ax,Seg MainVolume
  86.     mov    ds,ax
  87.     in    al,60h
  88.     cmp    al,127
  89.     ja    NoKey
  90.     mov    cs:[Key],al
  91. NoKey:
  92.     cmp    al,74
  93.     jne    NoVolDown
  94.     sub    [MainVolume],4
  95.     jns    NoVolDown
  96.     mov    [MainVolume],0
  97. NoVolDown:
  98.     cmp    al,78
  99.     jne    NoVolUp
  100.     add    [MainVolume],4
  101.     cmp    [MainVolume],64
  102.     jbe    NoVolUp
  103.     mov    [MainVolume],64
  104. NoVolUp:
  105.     cmp    al,81
  106.     jne    NoChangePatt1
  107.     mov    [PatternRow],64
  108. NoChangePatt1:
  109.     cmp    al,73
  110.     jne    NoChangePatt2
  111.     mov    [PatternRow],64
  112.     sub    [PlayingPattern],2
  113.     jns    NoChangePatt2
  114.     mov    [PlayingPattern],0
  115. NoChangePatt2:
  116.     cmp    al,2
  117.     jne    NoChan1OnOff
  118.     xor    [ChanOn],00000001b
  119. NoChan1OnOff:
  120.     cmp    al,3
  121.     jne    NoChan2OnOff
  122.     xor    [ChanOn],00000010b
  123. NoChan2OnOff:
  124.     cmp    al,4
  125.     jne    NoChan3OnOff
  126.     xor    [ChanOn],00000100b
  127. NoChan3OnOff:
  128.     cmp    al,5
  129.     jne    NoChan4OnOff
  130.     xor    [ChanOn],00001000b
  131. NoChan4OnOff:
  132.     cmp    al,6
  133.     jne    NoChan5OnOff
  134.     xor    [ChanOn],00010000b
  135. NoChan5OnOff:
  136.     cmp    al,7
  137.     jne    NoChan6OnOff
  138.     xor    [ChanOn],00100000b
  139. NoChan6OnOff:
  140.     cmp    al,8
  141.     jne    NoChan7OnOff
  142.     xor    [ChanOn],01000000b
  143. NoChan7OnOff:
  144.     cmp    al,9
  145.     jne    NoChan8OnOff
  146.     xor    [ChanOn],10000000b
  147. NoChan8OnOff:
  148.     in    al,61h
  149.     or    al,80h
  150.     out    61h,al
  151.     and    al,7Fh
  152.     out    61h,al
  153.     mov    al,20h
  154.     out    20h,al
  155.     pop    ds
  156.     pop    ax
  157.     iret
  158.  
  159. KeyInt        EndP
  160.  
  161. GetFileName    Proc    Near
  162.  
  163.     push    bx
  164.     push    di
  165.     mov    di,offset cs:[CommandLine]
  166.     mov    bx,82h
  167.     mov    al,es:[bx-2]
  168.     cmp    al,0
  169.     jne    TestNext
  170.     jmp    NoCmdLine
  171. TestNext:
  172.     mov    al,es:[bx]
  173.     cmp    al,0
  174.     jne    GetIt
  175.     jmp    NoCmdLine
  176.  
  177. GetIt:
  178.     mov    al,es:[bx]
  179.     inc    bx
  180.     mov    cs:[di],al
  181.     inc    di
  182.     cmp    al,0Dh
  183.     je    GotIt
  184.     jmp    GetIt
  185. GotIt:
  186.     mov    di,offset cs:[CommandLine]
  187.     mov    bx,offset cs:[ModToRead]
  188. MoveName:
  189.     mov    al,cs:[di]
  190.     inc    di
  191.     cmp    al,0Dh
  192.     jne    NotYetCommand
  193.     jmp    EndMoveName
  194. NotYetCommand:
  195.     cmp    al,32
  196.     je    EndMoveName
  197.     mov    cs:[bx],al
  198.     inc    bx
  199.     jmp    MoveName
  200. EndMoveName:
  201.     pop    di
  202.     pop    bx
  203.     ret
  204.  
  205. GetFileName    Endp
  206.  
  207. NoCmdLine:
  208.  
  209.     mov    ah,9
  210.     push    cs
  211.     pop    ds
  212.     mov    dx,offset cs:[Docs]
  213.     int    21h
  214.     mov    ax,4C00h
  215.     int    21h
  216.  
  217. _Code        ends
  218.  
  219.         end Begin